import 'package:flutter/material.dart';
import 'package:get/get.dart';

import 'theme_data.dart';

/// 主题模式枚举
enum AppThemeMode {
  light, /// 浅色主题
  dark, /// 深色主题
  auto, /// 跟随系统
}

/// 主题管理器
///
/// 职责：管理主题状态和切换，不重复封装 ThemeData 属性
/// 使用方法：
/// 1. 初始化：Get.put(ThemeManager())
/// 2. 获取实例：ThemeManager.instance
/// 3. 切换主题：ThemeManager.instance.switchTheme(AppThemeMode.dark)
/// 4. 监听变化：Obx(() => ThemeManager.instance.isDarkMode)
/// 5. 获取主题：Theme.of(context) 或 Get.theme
class ThemeManager extends GetxController {
  /// 单例实例
  static ThemeManager get instance => Get.find();

  /// 当前主题模式
  final _themeMode = AppThemeMode.light.obs;

  /// 是否为深色模式
  final _isDarkMode = false.obs;

  /// 获取当前主题模式
  AppThemeMode get themeMode => _themeMode.value;

  /// 获取是否为深色模式
  bool get isDarkMode => _isDarkMode.value;

  /// 获取当前主题数据 - 直接返回 ThemeData，让 Flutter 原生系统处理
  ThemeData get currentTheme => _isDarkMode.value ? AppTheme.darkTheme : AppTheme.lightTheme;

  @override
  void onInit() {
    super.onInit();
    _loadThemeMode();
  }

  /// 从本地存储加载主题设置
  void _loadThemeMode() {
    // TODO: 从 SharedPreferences 加载主题设置
    _themeMode.value = AppThemeMode.light;
    _updateDarkMode();
  }

  /// 更新深色模式状态
  void _updateDarkMode() {
    switch (_themeMode.value) {
      case AppThemeMode.light:
        _isDarkMode.value = false;
        break;
      case AppThemeMode.dark:
        _isDarkMode.value = true;
        break;
      case AppThemeMode.auto:
        // TODO: 根据系统主题自动切换
        _isDarkMode.value = false;
        break;
    }
  }

  /// 切换主题模式
  void switchTheme(AppThemeMode mode) {
    _themeMode.value = mode;
    _updateDarkMode();

    ///切换主题
    Get.changeTheme(currentTheme);
    Get.forceAppUpdate();

    // 保存设置
    _saveThemeMode();
  }

  /// 切换明暗主题
  void toggleTheme() {
    final newMode = _isDarkMode.value ? AppThemeMode.light : AppThemeMode.dark;
    switchTheme(newMode);
  }

  /// 保存主题设置
  void _saveThemeMode() {
    // TODO: 保存到 SharedPreferences
  }

  /// 获取主题切换按钮图标
  IconData get themeToggleIcon => _isDarkMode.value ? Icons.light_mode : Icons.dark_mode;

  /// 获取主题切换按钮提示
  String get themeToggleTooltip => _isDarkMode.value ? '切换到浅色模式' : '切换到深色模式';
}
